package com.itheima.demo01_instanceof;

/**
 * 目标：JDK 15 中的 instanceof 的模式匹配机制的变量访问范围的注意事项
 */
public class InstancofDemo03 {
    public static void main(String[] args) {
        test("黑马java");
    }

    public static void test(Object obj) {
        // JDK 15 中的 instanceof 的匹配机制：先判断obj的真实类型是否是 String
        // 如果是则把 obj 对象直接转型赋值给 str 变量指向
        // 如果obj不是 stirng 类型，则直接结束if分支，代码变得简洁
//        if (obj instanceof String str) {
//            System.out.println("结束是： " + str.length());
//        } else {
//            // 这里不能访问 str 变量
//            // 因为 object 不是 String 类型，就不会有str变量
//            System.out.println(str);
//        }

//        if (!(obj instanceof String str)) {
//            // 这里不能访问到 str 变量
//            // 因为变量在这个分支没有声明
//            System.out.println(str);
//        } else {
//            System.out.println("第二个分支：" + str.length());
//        }

//        if (obj instanceof String str && str.length() > 7) {
//            // 这可以可以访问 str
//            // 因为在 声明 str 变量之前的判断通过
//            System.out.println(str);
//        } else {
//            // 这里不能访问 str
//            System.out.println("第二个分支：" + str.length());
//        }

        // || 后面也不能访问 str
//        if (obj instanceof String str || str.length() > 7) {
//            // 这里也不能访问 str
//            System.out.println("第一个分支：" + str.length());
//        } else {
//            // 这里也不能访问 str
//            System.out.println("第二个分支：" + str.length() );
//        }
    }
}
